﻿using System;
using System.Windows.Forms;
using Business.Entity.Configuracao;
using Business.Entity.Contabil.Pessoa;
using Business.Entity.Contabil.Pessoa.SubClass.Empresa;
using Business.Entity.Contabil.Pessoa.SubClass.Usuario;
using Business.Enum;
using Business.Forms;
using NHibernate;

namespace Business.InformacoesIniciais
{
    public class DadosIniciais : IDisposable
    {
        public static Pessoa Pessoa { get; set; }
        public static ConfiguracaoGeral Conf { get; set; }
        public static Empresa Empresa { get; set; }
        public static ISessionFactory Factory { get; set; }
        public static void Iniciar()
        {
            ISession session;
            if (Factory == null)
            {
                session = RepositoryBase<object>.GetSessionFactory().OpenSession();
            }
            else
            {
                session = Factory.OpenSession();
            }
            
            var transaction = session.BeginTransaction();
            try
            {
                
                IniciaConfiguracoes(session);
                

                DadosSPED.PlanoContaReferencial(session);
                DadosIniciaisCst.Inicio(session);
                DadosIniciaisCfop.Iniciar();
                //DadosIniciaisNcm.IniciarDados();
                
                DadosIniciaisPerfil.IniciarDados(session);
                CriarUsuarioMaster();

                //DadosIniciaiEstoque.IniciarDados(session);
                //DadosIniciaisFinanceiro.IniciarDadosFinanceiro(session);
                var result = MessageBox.Show("Carregar dados para demonstração", "Atenção", MessageBoxButtons.YesNo);
                if (result == DialogResult.Yes)
                {
                    DadosDemonstracao.GravarDadosDemonstracao(session);
                }
                transaction.Commit();
            }
            catch (Exception)
            {
                transaction.Rollback();
            }
        }

        private static void CriarUsuarioMaster()
        {
            // Cria um novo usuário
            var u = new Usuario
            {
                Pessoa = Pessoa,
                Login = "MASTER",
                Senha = new Criptografia.CriptHash().GetHash("MASTER"),
                UsaRetaguarda = true,
                TipoUsuario = TipoUsuario.SuperAdministrador
            };
        }

        public static void IniciaConfiguracoes(ISession session)
        {
            Conf = new ConfiguracaoGeral();
            //var tipoTitulo = DadosIniciaisFinanceiro.TipoTituloPagamentoAvista(session);
            //var condicaoPagamento = DadosIniciaisVenda.CondicaoPagamentoPadrao(session);

            // Configurações do do sistema de retaguarda.
            if (Pessoa == null)
            {
                Pessoa = session.Get<Pessoa>(1);
            }
            Conf.PessoaPadrao = PessoaPadrao(session);

            //Dados iniciais de venda.
            //conf.CondicaoPagamentoPadrao = condicaoPagamento;
            //conf.FormaPagamentoPadrao = DadosIniciaisVenda.FormaPagamentoPadrao(session, tipoTitulo);
            Conf.DiaProcessamento = new DateTime();
            Conf.CobrarComposicaoPorMaiorValor = true;
            Conf.LimitarComposicaoDeProdutoEm = 0;
            
            //session.Save(u.Pessoa);
            session.Save(Conf);
            
        }

        private static Pessoa PessoaPadrao(ISession session)
        {
            Pessoa = new Pessoa();
            Pessoa.Nome = "Consumidor";
            Pessoa.Alias = "Consumidor";
            Pessoa.CpfCnpj = "0000000000";
            session.Save(Pessoa);
            return Pessoa;
        }

        public void Dispose()
        {

        }
    }
}
